/**
 * 给你一个整数数组 arr ，数组中的每个整数 互不相同 。另有一个由整数数组构成的数组 pieces，其中的整数也 互不相同 。请你以 任意顺序 连接 pieces 中的数组以形成 arr 。但是，不允许 对每个数组 pieces[i] 中的整数重新排序。
 *
 * 如果可以连接 pieces 中的数组形成 arr ，返回 true ；否则，返回 false 。
 *
 * 链接：https://leetcode.cn/problems/check-array-formation-through-concatenation
 * 。
 */
class CanFormArray {
    public boolean canFormArray(int[] arr, int[][] pieces) {
        int n=arr.length;
        int m=pieces.length;
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<m;i++) {
            map.put(pieces[i][0],i);
        }
       int i=0;
       while(i<n) {
           if(!map.containsKey(arr[i])) {
               return false;
           }
           int j=map.get(arr[i]);
           int len=pieces[j].length;
           for(int k=0;k<len;k++) {
               if(arr[i+k]!=pieces[j][k]) {
                   return false;
               }
           }
           i+=len;
       }
       return true;
    }
}